/**
    算法描述：普通递归，当长度大于1时就进行输出
    核心问题：如何将n拆分成输出样式的格式？开头需要从 “1” 进行拆分，一直到 n/2。
    解决所需数据结构+算法：数组 + 递归
**/
#include<iostream>
using namespace std;

int n, a[51] = {0};

void dfs(int k, int s) {
    // k为已拆分数字的个数，s为待拆解数
    if (k > 0) {
        a[k] = s;
        for (int i=0; i<k; i++) {
            cout << a[i] << "+";
        }
        cout << a[k] << endl;
    }
    for (int i=a[k-1] == 0 ? 1 : a[k-1];
        i<=s/2; i++) {
        // 要求是升序的，所以需要从a[k-1]开始遍历。
        // 需要处理一个特殊情况，即a[k-1]等于0的时候。
        a[k] = i;
        dfs(k+1, s-i);
    }
}

int main() {
    cin >> n;
    dfs(0, n);
    return 0;
}